// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
	state: {
		cartItems: [], // 购物车商品列表
		packagingFee: 1, // 包装费（详情页显示1元，菜单页可自定义）
		minOrderAmount: 20, // 起送价
	},
	mutations: {
		// 添加商品到购物车（自动合并相同规格商品）
		ADD_TO_CART(state, item) {
			const matchIndex = state.cartItems.findIndex(
				cartItem =>
				cartItem.name === item.name &&
				cartItem.size === item.size &&
				cartItem.temp === item.temp &&
				cartItem.sweet === item.sweet
			)
			if (matchIndex !== -1) {
				state.cartItems[matchIndex].quantity += 1
			} else {
				state.cartItems.push({
					...item,
					quantity: 1
				})
			}
		},
		// 增加商品数量
		INCREASE_QUANTITY(state, index) {
			state.cartItems[index].quantity += 1
		},
		// 减少商品数量（数量为1时触发删除确认）
		DECREASE_QUANTITY(state, index) {
			if (state.cartItems[index].quantity > 1) {
				state.cartItems[index].quantity -= 1
			}
		},
		// 从购物车删除商品
		REMOVE_FROM_CART(state, index) {
			state.cartItems.splice(index, 1)
		},
		// 清空购物车
		CLEAR_CART(state) {
			state.cartItems = []
		}
	},
	getters: {
		// 购物车商品总价（不含包装费）
		totalPrice(state) {
			return state.cartItems.reduce((total, item) => {
				return total + item.price * item.quantity
			}, 0)
		},
		// 购物车商品总数量
		totalQuantity(state) {
			return state.cartItems.reduce((total, item) => {
				return total + item.quantity
			}, 0)
		},
		// 购物车总价（含包装费）
		totalAmount(state, getters) {
			return getters.totalPrice + state.packagingFee
		},
		// 还差多少达到起送价
		remainingAmount(state, getters) {
			return getters.totalAmount < state.minOrderAmount ?
				(state.minOrderAmount - getters.totalAmount) :
				0
		}
	}
})